package com.itheima.mapper;

import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;

@Mapper
public interface EmpMapper {


    List<Emp> listEmp1();


    @Select("select * from emp;")
    List<Emp> listEmp();

    /**
     * 根据ID删除数据
     *
     * @param id 要删除数据的id
     */
    @Delete("delete from emp where id=${id};")
    void deleteById(Integer id);


    /**
     * 根据ID删除数据
     *
     * @param id 要删除数据的id
     */
    @Delete("delete from ${tableName} where id=#{id};")
    void deleteById2(@Param("tableName") String tableName, @Param("id") Integer id);
    // Param是用来指定参数的名字

    /**
     * 插入数据
     *
     * @param emp 要保存到数据库的对象，数据就在对象的属性值中
     *            <p>
     *            注意：emp后面的表字段要和数据库中表字段名字要一样
     *            value中#{}的数据名字要和POJO中的属性名一样。
     */
    @Options(keyProperty = "id", useGeneratedKeys = true)//让插入的数据id值回填到对象中去
    @Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +
            "value (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")
    void insert(Emp emp);


    /**
     * 修改数据
     *
     * @param emp
     */
    @Update("update emp set username=#{username} , name=#{name} ,job = #{job} " +
            "where id=#{id}")
    void update(Emp emp);


    /**
     * 根据id查询数据
     *
     * @param id
     * @return 指定id的数据
     */
    @Select("select id, username, password, name, gender, image, job, entrydate, dept_id , create_time , update_time  from emp where id=#{id};")
    Emp selectById(Integer id);


    @Select("select * from emp " +
            "where name like '%${name}%' and gender=#{gender} and entrydate between #{begin} and #{end};")
    List<Emp> list(@Param("name") String abc, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);

    @Select("select * from emp " +
            "where name like concat('%',#{name},'%') and gender=#{gender} and entrydate between #{begin} and #{end};")
    List<Emp> list2(@Param("name") String abc, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);

//    xml 实现映射，实现动态拼接SQL
    List<Emp> list3(@Param("name") String abc, @Param("gender") Short gender, @Param("begin") LocalDate begin, @Param("end") LocalDate end);


//    动态更新
    void update2(Emp emp);


    //    动态删除
    void delete2(@Param("ids") List<Integer> ids);


}
